var express = require('express');
var router = express.Router();
const userRouter = require('./users')
const postRouter = require('./post');
const db = require('../db');
const apiRouter = require('./api')

// 首页路由
router.get('/', async (req, res) => {
  // 查找全部的文章
  const posts = await db.findPost({})
  // console.log('posts', posts[0]);
  // 把posts参数 传给index模板 这样就可以在index模板里面使用posts里面的数据了
  res.render('index', { title: '一个自由的空间', ...posts })
})

// 登录路由
router.get('/login', (req, res) => {
  res.render('login', { title: '欢迎来到登录页面' })
})
router.post('/login', async (req, res) => {
  // 把用户登录的 信息提取出来
  const { username, password } = req.body
  // console.log('username', username);
  // console.log('password', password);

  const { callback } = req.query
  // console.log('callback', callback);

  try {
    if (username === "" || password === "") {
      throw new Error('请填写必须项！！！')
    }
    // 使用用户输入的username和password 在数据库里面查找 找到：result有值为true 没有找到result没有值为false
    const result = await db.findOneUser({ username, password });
    if (!result) { // 没有找到就返回一个Error
      throw new Error('用户名或密码错误')
    };
    // 登陆成功之后，把当前用户信息记录在session中
    // 把 在数据库中的找到的结果 中的密码删除 后 添加到session.user中
    delete result.password;
    req.session.user = result //登陆成功把用户信息添加到session内
    // 这个方法执行之后  会帮我们把session对象中的数据保存在数据库中
    req.session.save();

    // 添加flash的提示，两个参数：提示类型  提示信息
    req.flash('success', `${result.username} 您已登录`)
    // console.log('req.session', req.session);
    // req.flash('success', '测试信息')


    return res.redirect(callback || "/")
  } catch (error) {
    console.log(error.message);
    req.flash('error', error.message)
    return res.redirect('back')
  }
})

// 注册路由
router.get('/register', (req, res) => {
  res.render('register', {
    title: '注册享受更多的内容'
  })
})
router.post('/register', async (req, res) => {
  // post请求 的 参数 存放在 请求体中
  // console.log('req.body', req.body);
  const {
    username,
    password,
    repassword
  } = req.body
  // console.log('username', username);
  // console.log(password, repassword);
  try {
    // console.log(1);
    if (username === '' || password === '' || repassword === '') {
      throw new Error('请填写完整必须项')
    }
    if (password != repassword) {
      throw new Error('两次输入密码不一致')
    }
    // 判断用户名是否重复注册
    const tmp = await db.findOneUser({
      username
    })
    if (tmp) {
      throw new Error('用户已注册')
    }
    // 如果上面代码没有出现错误就说明注册成功 把信息添加进数据库 并返回主页
    // const result = db.addOneUser({
    //   username,
    //   password,
    //   sex: 'x',
    //   intro: '',
    //   avatar: '', // sex,intro,avatar 是添加的默认信息
    // })
    // console.log('result:::', result);
    // 改写：

    const { insertedId: _id } = await db.addOneUser({
      username,
      password,
      sex: 'x',
      intro: '',
      avatar: '', // sex,intro,avatar 是添加的默认信息
    });
    const user = await db.findOneUser({ _id });
    user.password && delete user.password;
    req.session.user = user;

    req.flash('success', `您已注册成功,用户名为：${username}`)
    // console.log('注册成功');


    // 注册成功 返回到首页
    return res.redirect('/')
  } catch (error) {
    // console.log(error.message);
    req.flash('error', error.message)
    // 返回 注册的初始页面 （注册失败）
    return res.redirect('back')
  }
})
// 退出路由  退出账号
router.get('/logout', (req, res) => {
  req.session.user = null //退出后把session里面的数据删除
  // 删除当前的session    destroy(error => console.log(error)) 参数可以不写 只有在失败时才会执行
  // req.session.destroy()  //destroy：摧毁  
  req.flash('success', '您已安全退出')
  // req.flash('success', '测试信息')
  // console.log(req.session)
  // 退出  重定向回主页
  res.redirect('/')
})

// 导出接口
module.exports = function (app) {
  app.use('/', router)
  app.use('/user', userRouter)
  app.use('/post', postRouter)
  app.use('/api', apiRouter)
}
